package cn.jee.cs.repo;

import cn.jee.cs.model.Course;
import cn.jee.cs.model.CourseStudent;
import cn.jee.cs.model.CourseStudentId;
import cn.jee.cs.vo.CourseStudentListVo;
import cn.jee.cs.vo.StudentAbbrDto;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;

import java.util.List;

public interface CourseStudentRepository extends CrudRepository<CourseStudent, CourseStudentId> {
    /**
     * 查找所有选课情况
     *
     * @return 选课列表
     */
    List<CourseStudentListVo> findAllBy();

    /**
     * 查找某课程（所有年份）的选课情况
     *
     * @param course 目标课程
     * @return 选课列表
     */
    List<CourseStudentListVo> findByCourse(Course course);

    /**
     * 查询某学年（所有课程）的选课情况
     *
     * @param year
     * @return
     */
    List<CourseStudentListVo> findById_Year(Integer year);

    /**
     * 查找某课程某学年的选课情况
     *
     * @param course 目标课程
     * @param year   目标学年
     * @return 选课列表
     */
    List<CourseStudentListVo> findByCourseAndId_Year(Course course, Integer year);

    /**
     * 使用JPQL查询没有选择指定课程的学生
     *
     * @param course
     * @return
     */
    @Query(value = "select new cn.jee.cs.vo.StudentAbbrDto(s.id,s.firstname,s.lastname)"
            + " from Student s"
            + " where s not in("
            + " select cs.student "
            + " from CourseStudent cs"
            + " where cs.course = ?1)")
    List<StudentAbbrDto> findStudentsByNotChosenCourse(Course course);

}
